package experimentos;

import ga.base.AlgoritmoGenetico;
import ga.base.Inicializacao;
import ga.base.OperadorCruzamento;
import ga.base.OperadorMutacao;
import ga.base.OperadorSelecao;
import ga.inicializacao.InicializacaoNormalizada;
import ga.operadores.cruzamento.CruzamentoDoisPontos;
import ga.operadores.mutacao.MutacaoGaussiana;
import ga.operadores.selecao.SelecaoElitista;
import ga.operadores.selecao.TorneioBinario;

import java.io.FileNotFoundException;

import problema.Problema;
import rn.TrainningProblem;
import util.Logger;
public class ExperimentoGA {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Inicializacao inicializacao = new InicializacaoNormalizada();
		OperadorCruzamento cruzamento = new CruzamentoDoisPontos();
		OperadorMutacao mutacao = new MutacaoGaussiana();
		OperadorSelecao selecao = new SelecaoElitista();
		OperadorSelecao selecaoPais = new TorneioBinario();
		Problema problema = new TrainningProblem();
		
		Logger logger = new Logger("resultados/ExperGA", 30, 50);
		
		double tempoMedio = 0;
		
		for(int i=0; i<30; i++){
			AlgoritmoGenetico algoritmo = new AlgoritmoGenetico(20, inicializacao, cruzamento, mutacao, 
					selecaoPais, selecao, (float)0.8, (float)0.1, problema);
			
			double tempoInicial = System.currentTimeMillis();
			algoritmo.execute();
			tempoMedio += (System.currentTimeMillis()-tempoInicial);
			
			logger.definirValores(i, algoritmo.getValoresPorInteracao());
			
			System.out.println(i + " - FIM");
		}

		try {
			logger.imprimirResultado();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println("Tempo Medio = " + (tempoMedio/30));
	}

}
